Proposition

Il s’agit d’un script de supervision utilisé en tant que shell pour un utilisateur (supervision) afin d’obtenir facilement les informations de son système sans taper aucune commande

  • Script central (Menu principal)

#!/bin/bash
#Auteur: Corentin MULLER
#Version : V1.0


# Script principal permettant la supervision du serveur + affichage du motd

# Calcul de la taille mémoire
MEMORY1=`free -t -m | grep Total | awk '{print $3" MB";}'`
MEMORY2=`free -t -m | grep "Mem" | awk '{print $2" MB";}'`
LOAD1=`cat /proc/loadavg | awk {'print $1'}`
LOAD5=`cat /proc/loadavg | awk {'print $2'}`
LOAD15=`cat /proc/loadavg | awk {'print $3'}`

#Répertoire de base
BASE=$(dirname "$0")
readonly BASE

#Serveur DNS
dns=$(grep "nameserver" /etc/resolv.conf | tail -1 | cut -d" " -f2)


#fonction pause
function pause {
  echo "Appuyer sur Entrée pour continuer..."
  read
}

# Debut de l'exécution du script
clear

echo "La date : $(date)"
echo""
echo "
 ######################################################################
 #            SUPERVISION sur : ${HOSTNAME}
 #            Depuis : $(who | cut -c 41-55)
 ######################################################################
"
echo "
Bienvenu dans la console d'administration

Informations système
====================================================================
 - Espace disque.....: $(df -h | head -2 | tail -n 1 | cut -c 40-44) utilisé (%)
====================================================================
 - Utilisation du CPU ...........: $LOAD1, $LOAD5, $LOAD15 (1, 5, 15 min)
 - Utilisation de la mémoire vive.........: $MEMORY1 / $MEMORY2
====================================================================
 - Adresse IP : $(hostname -i)
 - Masque de sous-réseau (CIDR): $(sudo ip add sh | grep " inet " | grep -v "127.0.0.1" | tr -s ' ' | cut -d" " -f 3 | cut -d "/" -f2)
 - Passerelle par défaut : $(sudo ip route | grep default | cut -d" " -f3)
 - Serveur DNS : $dns
"
#Fonction du menu principal
function print_menu {
  while (true)
  do
    echo "==================================================================="
    echo "                      MENU PRINCIPAL                               "
    echo "==================================================================="
    echo ""
    echo "Vous pouvez : "
    echo ""
    echo " => 1) Relancer le serveur "
    echo " => 2) Tester le reseau "
    echo " => 3) Afficher les utilisateurs "
    echo " => 4) Relancer un service "
    echo " => Q) Quitter ce super programme "
    echo " => S) Première utilisation"
    echo " => X) Retour accueil"
    echo ""
    read -p "Que voulez vous faire : " choix
    echo ""
    case $choix in
       "1")
         sudo reboot
         ;;
       "2")
         $BASE/check-net.sh
         ;;
       "3")
         $BASE/print-users.sh
         ;;
       "4")
         $BASE/gestion-service.sh
         ;;
       "q" | "Q" | "quitter" | "quit")
         exit 0
         ;;
       "s" | "S" | "setup")
                  # Test si supervision existe (ou si setup à été déjà fait)
         $BASE/setup.sh
         ;;
       "x" | "X")
         clear
         exec $0
         ;;
    esac
  done
}

#Execution du menu principal
print_menu
  • Script setup de 1 ère utilisation

#!/bin/bash
#Auteur:
#Version : V1.0
#Ce script permet la création de l'utilisateur et le contrôle de l'installation

if test grep "supervision" /etc/passwd
then
  useradd -s /opt/supervision/scripts/motd.sh -g users supervision
  chown supervision /opt/supervision/scripts/*
  chmod u+x /opt/supervision/scripts/*
  touch /etc/sudoers.d/supervision
  echo "Cmnd_Alias SUPERVISION = /sbin/reboot, /sbin/ip" > /etc/sudoers.d/supervision
  echo "supervision ALL=NOPASSWD:SUPERVISION" >> /etc/sudoers.d/supervision
else
   #Si déjà créé retour accueil
  clear
  echo "L'utilisateur est déjà créé "
  echo ""
  echo "Appuyer sur une touche pour continuer..."
  read
fi
  • Script d’affichage des utilisateurs

#!/bin/bash
#Auteur:
#Version : V1.0
#Ce script permet l'affichage des utilisateurs


# Interface du programme
clear
echo "###################################################"
echo "       Affichage des utilisateurs                  "
echo "###################################################"
echo ""
usersys="Voici la liste des utilisateurs systemes :\n"
userstd="Voici la liste des utilisateurs standard :\n"

OLDIFS='$IFS'
IFS=$'\n'

while read -r ligne
do
  uid=$(echo $ligne | cut -d: -f3)
  nom=$(echo $ligne | cut -d: -f1)
  if test "$uid" -lt "500"
  then
    usersys="${usersys}${nom}, "
  else
    userstd="${userstd}${nom}, "
  fi
done < /etc/passwd

echo -e "$usersys"
echo ""
echo -e "$userstd"
IFS=$OLDIFS

echo ""
echo "Appuyer sur une touche pour continuer"
read
  • Script de test du réseau

#!/bin/bash
# Fonction utilitaires du reseau
# Version 1
# Auteur : Corentin MULLER


#Fonction de test
#1 tester une adresse IP
function checkPING {
echo "Veuillez saisir une adresse IP ou un nom de domaine :"
read saisie
msg="Test de l'adresse IP ou nom :  ${saisie}"
echo ""
echo $msg
echo ""
echo " $(ping -c 4 $saisie)"
echo ""
echo "Appuyer sur une touche pour continuer..."
read
exec $0
}

#1 tester une résolution de nom DNS
function checkDNS {
echo "Veuillez saisir un nom de domaine (DNS) :"
read name
msg="Test du nom : ${name}"
echo ""
echo $msg
echo ""
echo "Adresse IP pour ${name} :  $(dig +short $name)"
echo ""
echo "Appuyer sur une touche pour continuer..."
read
exec $0
}

# Test de l'itinéraire enprunté pour rejoindre une destination
#1 tester une adresse IP
function checkITI {
echo "Veuillez saisir une adresse IP ou un nom de domaine :"
read destination
msg="Test de l'itinéraire ${destination}"
echo ""
echo $msg
echo ""
echo " $(tracepath $destination)"
echo ""
echo "Appuyer sur une touche pour continuer..."
read
exec $0
}


#Interface du programme
clear
echo "==================================================="
echo "            ASSISTANT DE TESTS RESEAU              "
echo "==================================================="
echo ""
echo " Que souhaitez vous tester ?"
echo " => 1) Tester la liaison vers un hôte (Ping)  "
echo " => 2) Tester la résolution de noms DNS"
echo " => 3) Tester l'itinéraire enprunté pour atteindre une dest. "
echo " => 4) Quitter cet assistant "
echo ""
read -p "Votre choix : " choix
echo ""
case $choix in
  "1")
    # Test du ping
    checkPING
    ;;
  "2")
    # Test de la résolution de nom DNS
    checkDNS
    ;;
  "3")
    # Test de l'itinéraire enprunté

    checkITI
    ;;
  "4")
    # Quitter l'assistant
    exit
   ;;
    *)
    # Cas ou l'option saisie n'est pas dans le menu
    echo "Cette fonctionnalité n'est pas encore developpee"
esac
  • Script d’affichage des utilisateurs

#!/bin/bash
#Auteur:
#Version : V1.0
#Ce script permet l'affichage des utilisateurs


# Interface du programme
clear
echo "###################################################"
echo "       Affichage des utilisateurs                  "
echo "###################################################"
echo ""
usersys="Voici la liste des utilisateurs systemes :\n"
userstd="Voici la liste des utilisateurs standard :\n"

OLDIFS='$IFS'
IFS=$'\n'

while read -r ligne
do
  uid=$(echo $ligne | cut -d: -f3)
  nom=$(echo $ligne | cut -d: -f1)
  if test "$uid" -lt "500"
  then
    usersys="${usersys}${nom}, "
  else
    userstd="${userstd}${nom}, "
  fi
done < /etc/passwd

echo -e "$usersys"
echo ""
echo -e "$userstd"
IFS=$OLDIFS

echo ""
echo "Appuyer sur une touche pour continuer"
read
  • Script de gestion des services

#!/bin/bash
#Version : V1.0
#Auteur :
#Ce programme permet de gérer les services

#Fonction de gestion des services
function startService {
  service=$saisie
  service $saisie status 1> /dev/null 2>&1
  status=$?
  if test "$status" = "0"
  then
    echo "Le service $saisie fonctionne..."
    read -p "Voulez-vous le relancer ? 0/N " rep
    if test "$rep" = "0" -o "$rep" = "o"
    then
      logger "SUPP -> Relance d'apache"
      echo "Relance du service $saisie"
      service $saisie restart 1> /dev/null 2>&1
      echo ""
      echo "Le serice ${saisie} a ete relance"
    else
      echo "Le service ${saisie} ne sera pas relance"
    fi
  else
    logger "SUPP -> Demarrage d'apache"
    echo "Lancement du service ${saisie}"
    service $saisie start 1> /dev/null 2>&1
    echo ""
    echo "Le service ${saisie} a ete lance"
  fi
}

#interface du programme

clear

echo "#######################################################"
echo "                Gestion des services                   "
echo "#######################################################"

echo ""
echo "La nom de votre service : "
read saisie

startService $saisie


echo "Appuyer sur une touche pour continuer..."
read